package com.loveto.service;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;

import com.feelingk.iap.IAPActivity;
import com.feelingk.iap.IAPLib;
import com.feelingk.iap.IAPLib.OnClientListener;
import com.feelingk.iap.IAPLibSetting;
import com.feelingk.iap.net.ItemAuth;
import com.feelingk.iap.net.ItemAuthInfo;
import com.feelingk.iap.net.ItemUse;

public class ChargePointTStoreActivity extends IAPActivity implements
View.OnClickListener{
	
	private ProgressDialog progressDialog;
	private Handler myHandler = new Handler();
	
	private String memberid;
	private int pointPresent;
	
	String AppID 	= "OA00279295"; //앱 ID
	String PID1		= "0900481649"; //상품 ID
	String PID2		= "0900481650"; //상품 ID
	String PID3		= "0900481651"; //상품 ID
	String PID4		= "0900481652"; //상품 ID
	String PID5		= "0900481653"; //상품 ID
	String presentPID;
	String BP_IP 	= "124.217.216.188"; //서버 IP
	int BP_Port 	= 5555; //서버 포트
	//String BP_IP 	= ""; //서버 IP
	//int BP_Port 	= 0; //서버 포트
	
    Boolean 	bPaid   = false;
    
    final int 	nDlgBasic = 100;
    final int 	nDlgPayment = 101;
    
    Button 		btBasic	= null;
    Button 		btPayment = null;
    
    byte    content[] = null;
	
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.loveto_charge_point);
		
		
		//초기화
		SharedPreferences pref = getSharedPreferences("userInfo", Activity.MODE_PRIVATE);
		memberid = pref.getString("memberid", "");
		pointPresent = pref.getInt("pointPresent", 0);
		
		//클릭 리스너 달기
		((RelativeLayout)findViewById(R.id.btn_goto_back)).setOnClickListener(this);
		((ImageView)findViewById(R.id.btn_charge_point_01)).setOnClickListener(this);
		((ImageView)findViewById(R.id.btn_charge_point_02)).setOnClickListener(this);
		((ImageView)findViewById(R.id.btn_charge_point_03)).setOnClickListener(this);
		((ImageView)findViewById(R.id.btn_charge_point_04)).setOnClickListener(this);
		((ImageView)findViewById(R.id.btn_charge_point_05)).setOnClickListener(this);
		
        // 설정 객체를 생성
        IAPLibSetting setting   = new IAPLibSetting(); 
        setting.AppID           = AppID;       	        // AID 설정
        setting.BP_IP 			= BP_IP;
        setting.BP_Port 		= BP_Port;
        setting.ClientListener  = mClientListener;      // 각종 완료 및 에러 핸들러 등록
        IAPLibInit(setting); //초기화
				
	}
	
	
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
			case R.id.btn_goto_back: 
				finish();
				break;
			case R.id.btn_charge_point_01:
				presentPID = PID1;
				doPurchase(presentPID);
				break;
			default:
				break;
		}
	}
	
	private void doPurchase(String PID) {
		popPurchaseDlg(presentPID,"클로버 10개","item_01_tstore","gogo");
		//popPurchaseDlg(presentPID);
	}
	
	   // 각종 완료 및 에러 처리 핸들러    
    OnClientListener mClientListener = new OnClientListener() {
        
        // 아이템 구매 가능 이벤트 처리
        // 구매가 가능한 아이템에 한하여 자체 아이템 발급 혹은 BP 서버를 통한 아이템을 발급 한 후 결과를 Boolean으로 반환 
        public Boolean onItemQueryComplete() {
            Boolean bReturn = false;
            Log.d("tag","성공 했을까");
            content = sendBPData(presentPID.getBytes());
            
            Log.d("tag","content:" + content.toString());
            
            if(content != null)
                bReturn = true;
            
             return bReturn;
        }
        
        // 아이템 구매 완료 이벤트 처리
        // 해당 아이템의 구매가 완료 되면 호출 된다.
		@Override
		public void onItemPurchaseComplete() {
			// TODO Auto-generated method stub
			 bPaid = true;
             btPayment.setText("유료 아이템 - 결제 완료");
             showDialog(nDlgPayment);
		}
		
		

        public void onWholeQuery(ItemAuth[] items) {
            
            // 전체 인증 아이템 목록이 수신되면 호출됨
        	Log.d("tag","결제 01");
            String strOut = "";
            
            int n = items.length;
            
            for(int i=0; i<n; ++i)
            {
                strOut += items[i].pId + " : " + items[i].pName + "\n";
            }
            
            viewToast(strOut);
            
            
        }


        public void onItemUseQuery(ItemUse item) {
        	Log.d("tag","결제 02");
            // 소멸성 아이템을 사용 시 호출됨
            String strOut = "";
            strOut += item.pId + " : " + item.pName + " : " + item.pCount;
            viewToast(strOut);
        }

        public void onItemAuthInfo(ItemAuthInfo itemAuth) {
        	Log.d("tag","결제 03");
            // 특정 아이템의 인증 호출됨
            String strOut = "";
            strOut += PID1 + " : " + itemAuth.pCount + " : " + new String(itemAuth.pExpireDate);
            viewToast(strOut);
            
            // 아이템의 토큰 정보를 반환
            if(itemAuth.pToken != null)
                Log.i("Sample", new String(itemAuth.pToken));
            
        }
        
    
		@Override
		public void onDlgError() {
			// TODO Auto-generated method stub
			viewToast("확인 버튼 클릭함");
		}

		@Override
		public void onDlgPurchaseCancel() {
			// TODO Auto-generated method stub
			viewToast("취소 버튼 클릭함");
		}

		@Override
		public void onError(int arg0, int arg1) {
			// TODO Auto-generated method stub
			  switch (arg0) {
	            // 초기화 실패
	            case IAPLib.HND_ERR_INIT:
	            	Log.d("tag","결제 에러 01");
	                break;
	            
	            // 인증 처리 에러
	            case IAPLib.HND_ERR_AUTH:
	            	Log.d("tag","결제 에러 02");
	                break;

	            // 아이템 구매 가능 처리 에러
	            case IAPLib.HND_ERR_ITEMQUERY:
	            	Log.d("tag","결제 에러 03");
	                break;

	            // 아이템 정보 수신 에러
	            case IAPLib.HND_ERR_ITEMINFO:
	            	Log.d("tag","결제 에러 04");
	                break;

	            // 아이템 과금 처리 에러
	            case IAPLib.HND_ERR_ITEMPURCHASE:
	            	Log.d("tag","결제 에러 05");
	                break;

	            // 서버 데이터 처리 에러
	            case IAPLib.HND_ERR_DATA:
	            	Log.d("tag","결제 에러 06");
	                break;
	            }
	            
		}

		@Override
		public void onJuminNumberDlgCancel() {
			// TODO Auto-generated method stub
			Log.d("tag","결제 진행 예외 01");
			
		}

		@Override
		public void onDlgAutoPurchaseInfoCancel() {
			// TODO Auto-generated method stub
			Log.d("tag","결제 진행 예외 02");
			
		}

		@Override
		public void onJoinDialogCancel() {
			// TODO Auto-generated method stub
			Log.d("tag","결제 진행 예외 03");
			
		}

		@Override
		public void onPurchaseDismiss() {
			// TODO Auto-generated method stub
			Log.d("tag","결제 진행 예외 04");
		}

 
    };
	
	public void viewToast(String message) {
		int gravity = Gravity.CENTER;
		int xOffset = 0;
		int yOffset = 0;
		Toast toast = Toast.makeText(this, message, Toast.LENGTH_LONG);
		toast.setGravity(gravity, xOffset, yOffset);
		toast.show();
	}
	
   private void showSimpleAlert(String msg) {
	   	new AlertDialog.Builder(this)
	   	.setMessage(msg)
	   	.setPositiveButton("확인", new DialogInterface.OnClickListener()
	   	{
	   		@Override
	   		public void onClick(DialogInterface dialog, int which)
	   		{
	   			dialog.dismiss();
	   		}
	   	})
	   	.show();
   }
}
